<?php
/**
 * Interface zum Db_Connector
 *
 * @author		Joachim Ruf
 * @copyright	Copyright (c) 2003-2013 Loresoft Software (http://www.loresoft.de)
 * @license		http://yapary.loresoft.de/lizenzbedingungen     New BSD License
 *
 * */


class Yapary_Db_Sql_Result
{
    /* @var $connection MySQLi */
	private $connection   = NULL;
	/* @var $resId mysqli_result */
    private $resId        = NULL;
    private $strQuery     = NULL;
    private $errCode      = NULL;
	private $lastInsertId = NULL;


    function __construct (MySQLi $_connection, $_resId, $_strQuery, array $_arrAttribute) {
		if (gettype($_resId) !== 'object') {
		    $this->resId = NULL;
//		    trigger_error('INVALID RESOURCE');
		}

		$this->lastInsertId	= $_connection->insert_id;
        $this->connection	= $_connection;
        $this->resId		= $_resId;
        $this->strQuery		= $_strQuery;
        $this->errCode		= $_arrAttribute['errCode'];
        $this->errMsg		= $_arrAttribute['errMsg'];
    }


    /**
     * Liefert bei einem Insert die von MySql erstellte Insert-Id
     * @return int|string
     * */
    public function getLastInsertId () {
    	return $this->lastInsertId;
    }


    /**
     * Liefert den naechsten Datensatz
     * @return mixed
     * */
    public function getNext () {
		if ($row = @$this->resId->fetch_object()) {
			return $row;
		}

		@$this->resId->free_result();
		return false;
    }


    /**
     * Liefert alle Ergebnisse als Array zurueck
     * @return Array
     * */
    public function getList ($_getStringKey = true, $_getNumericKey = false) {
		$arrTmp	= array();

		if ($arr = @$this->resId->fetch_array()) {
			foreach ($arr as $key => $val) {
				if ($_getNumericKey === true && is_numeric($key)) { // Numerische Keys anzeigen
					$arrTmp[$key] = $val;
				}
				if ($_getStringKey === true && is_string($key)) { // String-Keys anzeigen
					$arrTmp[$key] = $val;
				}
			}
			return $arrTmp;
		}

		@$this->resId->free_result();
		return false;
    }


    /**
     * Liefert die Anzahl an Eintraege
     * @return int
     * */
    public function getCount () {
	    $count = @$this->resId->num_rows;
	    if ($count == NULL) {
			return 0;
		}

		return (int) $count;
    }


    /**
     * gibt den eingegebenen Sql-Query aus
     * @return string
     * */
    public function getQuery () {
		return $this->strQuery;
	}


	/**
	 * gibt den eingegebenen Sql-Query aus
	 * @return string
	 * */
	public function getQueryPrintR () {
		$string	= str_replace(
							array(chr(0x0009), '  '),
							array('', ''),
							$this->strQuery
					);
		return '<pre>'.print_r($string, true).'</pre>';
	}


    /**
     * Prueft, ob der ausgefuehrte Query fehlerfrei akzeptiert wurde
     * @return bool
     * */
	public function isValid () {
		if ($this->errCode != 0) {
			return false;
		}

		return true;
	}


	/**
	 * gibt den Fehlercode zum Sql-Query aus
	 * @return int
	 * */
	public function getErrCode () {
		return $this->errCode;
	}


	/**
	 * gibt die Fehlermeldung zum Sql-Query aus
	 * @return int
	 * */
	public function getErrMsg () {
		return $this->errMsg;
	}


    /**
     * setzt den Offset neu
     * @param int $_index	: Neuer offset
     * @return bool
     * */
    public function setOffset ($_index = 0) {
        if ($_index < 0) {
            return false;
        }
        if ($_index > $this->getCount()) {
            return false;
        }

        return @$this->resId->data_seek($_index);
    }

}


?>